package com.tjetc._2code_block;

public class _1CodeBlock {
    public static void main(String[] args) {
        /*
            代码块：
            1.希望我们在程序启动时，就做一些操作
            2.代码块就是我们之前写的所有的逻辑，和方法类型，区别是没有方法的三要素 只有一个要素 就是方法体（逻辑代码）
            3.不需要显示的调用（两种 对象调用 类调用）是自动隐式调用
            4.代码块的分类：普通代码块（对象创建时就会调用），静态代码块（类加载的时候）
            5.普通代码块：每次对象创建的时候都会调用。 静态代码块：只会执行一次

            基本语法：

            修饰符 {
                代码
            }；
            注意：
                1.修饰符只能是static
                2.分号可以省略也可以写上 一般省略

            作用：
                1. 相当于另外⼀种形式的构造器(对构造器的补充机制),可以做初始化的操作
                2. 场景：如果多个构造器中都有重复的语句，可以抽取到初始化块中，提⾼代码的重⽤性
         */

        A a = new A();
        A a1 = new A();
        A a2 = new A(1);
    }
}

class A {
    int a;
    // 静态代码块
    static {
        System.out.println("静态代码块");
    }
    // 普通代码块
    {
        System.out.println("普通代码块");
        System.out.println("创建A对象");
    }

    public A() {
//        System.out.println("创建A对象");
    }

    public A (int a){
//        System.out.println("创建A对象");
        this.a = a;
    }
}
